﻿using System;
using System.Collections.Generic;
using System.Text;

namespace OkTool.Util
{
    public class PageUtil
    {
        private static int firstPageNo = 0;

        /// <summary>
        /// 设置首页页码，可以为0或者1
        /// <para>当设置为0时，页码0表示第一页，开始位置为0</para>
        /// <para>当设置为1时，页码1表示第一页，开始位置为0</para>
        /// </summary>
        /// <param name="customFirstPageNo"></param>
        public static void SetFirstPageNo(int customFirstPageNo)
        {
            firstPageNo = customFirstPageNo;
        }


        /// <summary>
        /// 将页数和每页条目数转换为开始位置
        /// <para>此方法用于不包括结束位置的分页方法</para>
        /// <list type="table">
        /// <item>例如</item>
        /// <item>页码：0，每页10 =》 0</item>
        /// <item>页码：1，每页10 =》 10</item>
        /// </list>
        /// </summary>
        /// <param name="pageNo">页码（从0计数）</param>
        /// <param name="pageSize">每页条目数</param>
        /// <returns>开始位置</returns>

        public static int GetStart(int pageNo, int pageSize)
        {
            if (pageNo < firstPageNo)
            {
                pageNo = firstPageNo;
            }

            if (pageSize < 1)
            {
                pageSize = 0;
            }

            return (pageNo - firstPageNo) * pageSize;
        }

        /// <summary>
        /// 将页数和每页条目数转换为结束位置
        /// <list type="table">
        /// <item>此方法用于不包括结束位置的分页方法</item>
        /// <item>例如:</item>
        /// <item>页码：0，每页10 =》 9</item>
        /// <item>页码：1，每页10 =》 19</item>
        /// </list>
        /// </summary>
        /// <param name="pageNo"></param>
        /// <param name="pageSize"></param>
        /// <returns></returns>
        public static int GetEnd(int pageNo, int pageSize)
        {
            int start = GetStart(pageNo, pageSize);
            return getEndByStart(start, pageSize);
        }
        private static int getEndByStart(int start, int pageSize)
        {
            if (pageSize < 1)
            {
                pageSize = 0;
            }
            return start + pageSize;
        }
        /// <summary>
        /// 根据总数计算总页数
        /// </summary>
        /// <param name="totalCount">总数</param>
        /// <param name="pageSize">每页数</param>
        /// <returns></returns>
        public static int TotalPage(long totalCount, int pageSize)
        {
            if (pageSize == 0)
            {
                return 0;
            }

            return (int)(totalCount % pageSize == 0 ? (totalCount / pageSize) : (totalCount / pageSize + 1));
        }
    }
}
